#include <cstdio>

/*
    两次搜索，如果王子和公主能走过同一个点，表示可以

 */

char mp[105][105];
bool vis[105][105][2];   // 标记王子走还是公主走,王子 -> 2  公主 1
int n, m;

void dfs(int x, int y, int step) {
    if(x < 0 || x >= n || y < 0 || y >= m || vis[x][y][step] || mp[x][y] == '#') {
        return ;
    }
    vis[x][y][step] = true;

    dfs(x - (2 - step), y, step);
    dfs(x + (2 - step), y, step);
    dfs(x, y - (2 - step), step);
    dfs(x, y + (2 - step), step);
}

int main()
{
    int x, y;
    bool ans = false;

    scanf("%d%d", &n, &m);
    for(int i = 0; i < n; i++) {
        scanf("%s", mp[i]);
    }

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            if('w' == mp[i][j]) {
                x = i;
                y = j;
            }
        }
    }
    // 0 --> 王子走   1 --> 公主走
    dfs(x, y, 0);

    // 公主走
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            if('g' == mp[i][j]) {
                x = i;
                y = j;
            }
        }
    }
    dfs(x, y, 1);

    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            if(vis[i][j][0] && vis[i][j][1]) {
                ans = true;
            }
        }
    }

    if(ans) {
        printf("Yes\n");
    } else {
        printf("No\n");
    }

    return 0;
}

